// 用户认证管理工具类
const { get, post } = require('./request.js')

class AuthManager {
  constructor() {
    this.userInfo = uni.getStorageSync('userInfo') || {}
    this.token = uni.getStorageSync('token') || ''
  }

  // 检查是否已登录
  isLoggedIn() {
    return !!(this.token && this.userInfo.id)
  }

  // 获取用户信息
  getUserInfo() {
    return this.userInfo
  }

  // 获取token
  getToken() {
    return this.token
  }

  // 设置用户信息
  setUserInfo(userInfo) {
    this.userInfo = userInfo
    uni.setStorageSync('userInfo', userInfo)
  }

  // 设置token
  setToken(token) {
    this.token = token
    uni.setStorageSync('token', token)
  }

  // 登录
  async login(loginData) {
    try {
      const response = await post('/auth/login', loginData)
      if (response.data.code === 200) {
        this.setToken(response.data.data.token)
        this.setUserInfo(response.data.data.userInfo)
        return response.data
      } else {
        throw new Error(response.data.message || '登录失败')
      }
    } catch (error) {
      throw error
    }
  }

  // 注册
  async register(registerData) {
    try {
      const response = await post('/auth/register', registerData)
      if (response.data.code === 200) {
        return response.data
      } else {
        throw new Error(response.data.message || '注册失败')
      }
    } catch (error) {
      throw error
    }
  }

  // 退出登录
  async logout() {
    try {
      // 清除本地存储
      this.userInfo = {}
      this.token = ''
      uni.removeStorageSync('userInfo')
      uni.removeStorageSync('token')

      // 调用后端注销接口
      await post('/auth/logout')

      // 跳转到登录页
      uni.reLaunch({
        url: '/qmy_user/login'
      })
    } catch (error) {
      console.error('退出登录失败:', error)
    }
  }

  // 检查登录状态，未登录则跳转到登录页
  checkLogin() {
    if (!this.isLoggedIn()) {
      uni.showToast({
        title: '请先登录',
        icon: 'none'
      })
      setTimeout(() => {
        uni.navigateTo({
          url: '/qmy_user/login'
        })
      }, 1500)
      return false
    }
    return true
  }

  // 更新用户信息
  async updateUserInfo(updateData) {
    this.userInfo = uni.getStorageSync('userInfo') || {}
    try {
      const response = await post('/user/updateUserInfo', updateData)
      if (response.data.code === 200) {
        this.setUserInfo({
          ...this.userInfo,
          ...response.data.data
        })
        return response.data
      } else {
        throw new Error(response.data.message || '更新失败')
      }
    } catch (error) {
      throw error
    }
  }

  // 获取当前用户信息（从服务器）
  async getCurrentUserInfo() {
    try {
      const response = await get('/user/userinfo')
      if (response.data.code === 200) {
        this.setUserInfo(response.data.data)
        return response.data.data
      } else {
        throw new Error(response.data.message || '获取用户信息失败')
      }
    } catch (error) {
      throw error
    }
  }

  // token过期检查
  isTokenExpired() {
    // 这里可以根据实际情况实现token过期检查逻辑
    // 例如检查token中的过期时间戳
    return false
  }
}

// 创建全局实例
const authManager = new AuthManager()

export default authManager
